home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / cocktail / docme.lha / doc.me / features.me < prev    next >
Text File  |  1992-09-25  |  14KB  |  779 lines

  1. .\" use: pic | tbl | eqn | ditroff -me
  2. .\"
  3. .\"    "@(#)bibmac.me    2.2    9/9/83";
  4. .de IP
  5. .ip \\$1 \\$2
  6. ..
  7. .de LP
  8. .lp
  9. ..
  10. .\"    @(#)bmac.std    2.2    9/9/83;
  11. .\" standard format troff commands
  12. .\" citation formatting strings
  13. .ds [[ [
  14. .ds ]] ]
  15. .ds ], ,\|
  16. .ds ]- -
  17. .ds [. " \&
  18. .ds .] .
  19. .ds [, " \&
  20. .ds ,] ,
  21. .ds [? " \&
  22. .ds ?] ?
  23. .ds [: " \&
  24. .ds :] :
  25. .ds [; " \&
  26. .ds ;] ;
  27. .ds [! " \&
  28. .ds !] !
  29. .ds [" " \&
  30. .ds "] \&"
  31. .ds [' " \&
  32. .ds '] '
  33. .ds [< " \&
  34. .ds >]
  35. .\" reference formmating strings
  36. .ds a] " \&
  37. .ds b] , \&
  38. .ds c] , \&
  39. .ds n] "\& and \&
  40. .ds m] "\& and \&
  41. .ds p] .
  42. .\" reference formmating macros
  43. .de s[   \" start reference
  44. .nh
  45. .IP [\\*([F] 5m
  46. ..
  47. .de e[   \" end reference
  48. .[-
  49. ..
  50. .de []   \" start to display collected references
  51. .LP
  52. ..
  53. .de ][   \" choose format
  54. .ie !"\\*([J"" \{\
  55. .    ie !"\\*([V"" .nr t[ 1    \" journal
  56. .    el            .nr t[ 5    \" conference paper
  57. .\}
  58. .el .ie !"\\*([B"" .nr t[ 3    \" article in book
  59. .el .ie !"\\*([R"" .nr t[ 4    \" technical report
  60. .el .ie !"\\*([I"" .nr t[ 2    \" book
  61. .el                .nr t[ 0    \" other
  62. .\\n(t[[
  63. ..
  64. .de 0[   \" other
  65. .s[
  66. .if !"\\*([A"" \\*([A\\c
  67. .if !"\\*([T"" , \\*([T\\c
  68. .if !"\\*([V"" , Vol. \\*([V\\c
  69. .if !"\\*([O"" , \\*([O\\c
  70. .if !"\\*([D"" , \\*([D\\c
  71. \&.
  72. .e[
  73. ..
  74. .de 1[ \" journal article
  75. .s[
  76. .if !"\\*([A"" \\*([A,
  77. .if !"\\*([T""  \\*([T,
  78. \\fI\\*([J \\*([V\\fP\c
  79. .if !"\\*([N"" ,\\*([N
  80. .if !"\\*([D"" (\\*([D)\c
  81. .if !"\\*([P"" , \\*([P\c
  82. .if !"\\*([I"" , \\*([I\c
  83. \\&.
  84. .if !"\\*([O"" \\*([O.
  85. .e[
  86. ..
  87. .de 2[ \" book
  88. .s[
  89. .ie !"\\*([A"" \\*([A,
  90. .el .if !"\\*([E"" \{\
  91. .       ie \\n([E-1 \\*([E, eds.,
  92. .       el \\*([E, ed.,\}
  93. .if !"\\*([T"" \\fI\\*([T\\fP,
  94. .rm a[
  95. .if !"\\*([I"" .ds a[ \\*([I
  96. .if !"\\*([C"" \{\
  97. .       if !"\\*(a["" .as a[ , \\&
  98. .       as a[ \\*([C\}
  99. .if !"\\*([D"" \{\
  100. .       if !"\\*(a["" .as a[ , \\&
  101. .       as a[ \\*([D\}
  102. \\*(a[.
  103. .if !"\\*([G"" Gov. ordering no. \\*([G.
  104. .if !"\\*([O"" \\*([O.
  105. .e[
  106. ..
  107. .de 3[ \" article in book
  108. .s[
  109. .if !"\\*([A"" \\*([A,
  110. .if !"\\*([T"" \\*([T,
  111. in \\fI\\*([B\\fP\c
  112. .if !"\\*([V"" , vol. \\*([V
  113. .if !~\\*([E~~ \{\
  114. .       ie , \\n([E-1  \\*([E (editors)\c
  115. .       el , \\*([E (editor)\c\}
  116. .if !"\\*([I"" , \\*([I\c
  117. .if !"\\*([C"" , \\*([C\c
  118. .if !"\\*([D"" , \\*([D\c
  119. .if !"\\*([P"" , \\*([P\c
  120. \\&.
  121. .if !"\\*([O"" \\*([O.
  122. .e[
  123. ..
  124. .de 4[ \" report
  125. .s[
  126. .if !"\\*([A"" \\*([A,
  127. .if !~\\*([E~~ \{\
  128. .       ie \\n([E-1 \\*([E, editors.
  129. .       el \\*([E, editor.\}
  130. \\*([T,
  131. \\*([R\c
  132. .if !"\\*([G"" \& (\\*([G)\c
  133. .if !"\\*([I"" , \\*([I\c
  134. .if !"\\*([C"" , \\*([C\c
  135. .if !"\\*([D"" , \\*([D\c
  136. \\&.
  137. .if !"\\*([O"" \\*([O.
  138. .e[
  139. ..
  140. .de 5[ \" conference paper
  141. .s[
  142. .if !"\\*([A"" \\*([A,
  143. .if !"\\*([T"" \\*([T,
  144. \\fI\\*([J\\fP,
  145. .if !"\\*([C"" \\*([C,
  146. .if !"\\*([D"" \\*([D\c
  147. .if !"\\*([P"" , \\*([P\c
  148. \\&.
  149. .if !"\\*([O"" \\*([O.
  150. .e[
  151. ..
  152. .de [-   \" clean up after yourself
  153. .rm [A [B [C [D
  154. .rm [E [F [G
  155. .rm [I [J [K
  156. .rm [N [O [P
  157. .rm [R [T
  158. .rm [V [W
  159. ..
  160. .\"    @(#)bmac.std    2.2    8/24/83;
  161. .\" standard format troff commands
  162. .\" citation formatting strings
  163. .ds [[ [
  164. .ds ]] ]
  165. .ds ], ,\|
  166. .ds ]- -
  167. .ds [. " \&
  168. .ds .] .
  169. .ds [, " \&
  170. .ds ,] ,
  171. .ds [< " \&
  172. .ds >]
  173. .\" reference formmating strings
  174. .ds c] , \&
  175. .ds n] "" and \&
  176. .ds m] "" and \&
  177. .ds a] " \&
  178. .\" reference formmating macros
  179. .de s[   \" start reference
  180. .nh
  181. .IP [\\*([F] 5m
  182. ..
  183. .de e[   \" end reference
  184. .[-
  185. ..
  186. .de []   \" start to display collected references
  187. .SH
  188. References
  189. .LP
  190. ..
  191. .de ][   \" choose format
  192. .ie !"\\*([J"" \{\
  193. .    ie !"\\*([V"" .nr t[ 1    \" journal
  194. .    el            .nr t[ 5    \" conference paper
  195. .\}
  196. .el .ie !"\\*([B"" .nr t[ 3    \" article in book
  197. .el .ie !"\\*([R"" .nr t[ 4    \" technical report
  198. .el .ie !"\\*([I"" .nr t[ 2    \" book
  199. .el                .nr t[ 0    \" other
  200. .\\n(t[[
  201. ..
  202. .de 0[   \" other
  203. .s[
  204. .if !"\\*([A"" \\*([A,
  205. .if !"\\*([T"" \\*([T,
  206. .if !"\\*([O"" \\*([O\c
  207. .if !"\\*([D"" , \\*([D\c
  208. \&.
  209. .e[
  210. ..
  211. .de 1[ \" journal article
  212. .s[
  213. .if !"\\*([A"" \\*([A,
  214. .if !"\\*([T"" \\*([T,
  215. \\fI\\*([J \\*([V\\fP,
  216. .if !"\\*([N"" \\*([N
  217. .if !"\\*([D"" (\\*([D),
  218. .if !"\\*([P"" \\*([P\c
  219. .if !"\\*([I"" , \\*([I\c
  220. \\&.
  221. .if !"\\*([O"" \\*([O.
  222. .e[
  223. ..
  224. .de 2[ \" book
  225. .s[
  226. .ie !"\\*([A"" \\*([A,
  227. .el .if !"\\*([E"" \{\
  228. .       ie \\n([E-1 \\*([E, eds.,
  229. .       el \\*([E, ed.,\}
  230. .if !"\\*([T"" \\fI\\*([T\\fP,
  231. .rm a[
  232. .if !"\\*([I"" .ds a[ \\*([I
  233. .if !"\\*([C"" \{\
  234. .       if !"\\*(a["" .as a[ , \\&
  235. .       as a[ \\*([C\}
  236. .if !"\\*([D"" \{\
  237. .       if !"\\*(a["" .as a[ , \\&
  238. .       as a[ \\*([D\}
  239. \\*(a[.
  240. .if !"\\*([G"" Gov. ordering no. \\*([G.
  241. .if !"\\*([O"" \\*([O.
  242. .e[
  243. ..
  244. .de 3[ \" article in book
  245. .s[
  246. .if !"\\*([A"" \\*([A,
  247. .if !"\\*([T"" \\*([T,
  248. in \\fI\\*([B\\fP,
  249. .if !"\\*([V"" vol. \\*([V,
  250. .if !"\\*([E"" \\*([E (ed.),
  251. .if !"\\*([I"" \\*([I,
  252. .if !"\\*([C"" \\*([C,
  253. .if !"\\*([D"" \\*([D\c
  254. .if !"\\*([P"" , \\*([P\c
  255. \\&.
  256. .if !"\\*([O"" \\*([O.
  257. .e[
  258. ..
  259. .de 4[ \" report
  260. .s[
  261. .if !"\\*([A"" \\*([A,
  262. \\*([T,
  263. \\*([R\c
  264. .if !"\\*([G"" \& (\\*([G)\c
  265. .if !"\\*([I"" , \\*([I\c
  266. .if !"\\*([C"" , \\*([C\c
  267. .if !"\\*([D"" , \\*([D\c
  268. \\&.
  269. .if !"\\*([O"" , \\*([O.
  270. .e[
  271. ..
  272. .de 5[ \" conference paper
  273. .s[
  274. .if !"\\*([A"" \\*([A,
  275. .if !"\\*([T"" \\*([T,
  276. \\fI\\*([J\\fP,
  277. .if !"\\*([C"" \\*([C\c
  278. .if !"\\*([D"" , \\*([D\c
  279. .if !"\\*([P"" , \\*([P\c
  280. \\&.
  281. .if !"\\*([O"" , \\*([O.
  282. .e[
  283. ..
  284. .de [-   \" clean up after yourself
  285. .rm [A [B [C [D
  286. .rm [E [F [G
  287. .rm [I [J [K
  288. .rm [N [O [P
  289. .rm [R [T
  290. .rm [V [W
  291. ..
  292. .if t \{ \
  293. .pl 29.7c    \" page length
  294. .po 2.5c    \" page offset (left margin)
  295. .ll 16.5c    \" line length
  296. .lt 16.5c    \" title length
  297. .nr LL 16.5c
  298. .nr )l 29.7c
  299. .nr hm 2c
  300. .nr $r 9    \" factor for vertical spacing
  301. .nr $R \n($r
  302. .sz 12        \" font size
  303. .nr pp 12
  304. .nr sp 12
  305. .nr tp 12
  306. .nr fp 10
  307. .hc ~        \" hyphenation character
  308. .        \" Umlauts and sharp s
  309. .ds A \(A:
  310. .ds O \(O:
  311. .ds U \(U:
  312. .ds a \(a:
  313. .ds o \(o:
  314. .ds u \(u:
  315. .ds s \(ss
  316. .        \"  UMLAUT  \*:u, etc.
  317. .ds : \v'-0.6m'\h'(1u-(\\n(.fu%2u))*0.13m+0.06m'\z.\h'0.2m'\z.\h'-((1u-(\\n(.fu%2u))*0.13m+0.26m)'\v'0.6m'
  318. .\}
  319. .if n \{ \
  320. .po 0        \" page offset (left margin)
  321. .ll 78        \" line length
  322. .lt 78        \" title length
  323. .nr $r 4    \" factor for vertical spacing
  324. .nr $R \n($r
  325. .hc ~        \" hyphenation character
  326. .        \" Umlaute und scharfes s
  327. .ds A Ae
  328. .ds O Oe
  329. .ds U Ue
  330. .ds a ae
  331. .ds o oe
  332. .ds u ue
  333. .ds s sz
  334. .\}
  335. .de _
  336. \&\\$1\l'|0\(ul'\\$2
  337. ..
  338. .de FT        \" font for programs
  339. .ft C
  340. .sz -2
  341. ..
  342. .de FR
  343. .ft R
  344. .sz +2
  345. ..
  346. .de []        \" start to display collected references
  347. .uh References
  348. .lp
  349. ..
  350. .de $0        \" collect table of contents
  351. .(x
  352. .ta 2c
  353. .ie '\\$2''    \\$1
  354. .el \\$2.    \\$1
  355. .)x
  356. ..
  357. .de np
  358. .nr $p +1
  359. .ip \\n($p.
  360. ..
  361. .de SH
  362. .sp 0.5
  363. .in -3
  364. .r \\$1
  365. .sp 0.5
  366. .in +3
  367. ..
  368. .de PP
  369. .sp 0.5
  370. ..
  371. .de IP
  372. .ip \\$1 \\$2
  373. ..
  374. .de I
  375. .i \\$1
  376. ..
  377. .de TH
  378. ..
  379. .hc @
  380. .EQ
  381. gsize 12
  382. gfont B
  383. delim off
  384. .EN
  385. .sz 28
  386. .b
  387. .ce 2
  388. Automatic Generation
  389. of Efficient Compilers
  390. .sp 2
  391. .nf
  392. .ta 3c
  393. .sz 18
  394. using a complete tool box containing:
  395. .sz 14
  396.  
  397.    Rex    scanner generator
  398.  
  399.    Lalr    LALR(1) parser generator
  400.  
  401.    Ell    LL(1) parser generator
  402.  
  403.    Ast    generator for abstract syntax trees
  404.  
  405.    Ag    attribute evaluator generator (OAG)
  406.  
  407.    Estra    transformation of attributed syntax trees
  408.  
  409.    Beg    back end generator
  410.  
  411.    Reuse    library of reusable modules
  412.  
  413.  
  414. .sz 18
  415. advantages:
  416. .sz 14
  417. .sp 0.5
  418. - specification replaces implementation
  419. .sp 0.5
  420. - tools reduce construction effort
  421. .sp 0.5
  422. - consistency checks avoid errors
  423. .sp 0.5
  424. - program generation increases reliability
  425. .sp 0.5
  426. - efficiency comparable to hand-written implementations
  427. .sp
  428. .sz 18
  429. common properties:
  430. .sz 14
  431. .sp 0.5
  432. - implementation languages are Modula-2 or C
  433. .sp 0.5
  434. - target languages are Modula-2 or C
  435. .b
  436. .bp
  437. .ce
  438. .sz 28
  439. Compiler Generation
  440. .sz 14
  441. .PS
  442. linewid    = linewid * 1.2
  443. boxwid    = boxwid * 1.7
  444. boxht    = boxht * 1.2
  445. circlerad = circlerad * 1.2
  446. bh    = boxht * 1.8
  447.  
  448.     right
  449.  
  450. S1:    box "concrete" "syntax" height bh
  451.     arrow dashed
  452. SP:    box "Scanner" "Spec"
  453.     arrow
  454. T:    circle "rex"
  455.     arrow
  456. I1:    box "Scanner"
  457.  
  458. S2:    box "mapping" "concrete \(->" "abstract" at S1 - (0, bh) height bh
  459.     arrow dashed
  460. P:    box "Parser" "Spec"
  461.     arrow
  462.     circle "lalr" "ell"
  463.     arrow
  464. I2:    box "Parser"
  465.  
  466. S3:    box "abstract" "syntax" at S2 - (0, bh) height bh
  467.     arrow dashed
  468.     box "Tree" "Spec"
  469.     arrow
  470.     circle "ast"
  471.     arrow
  472. I3:    box "Tree"
  473.  
  474. S4:    box "semantic" "analysis" at S3 - (0, bh) height bh
  475.     arrow dashed
  476.     box "Semantics" "Spec"
  477.     arrow
  478.     circle "ag"
  479.     arrow
  480. I4:    box "Semantics"
  481.  
  482. S5:    box "mapping" "abstract \(->" "intermediate" at S4 - (0, bh) height bh
  483.     arrow dashed
  484.     box "Trafo" "Spec"
  485.     arrow
  486.     circle "estra"
  487.     arrow
  488. I5:    box "Trafo"
  489.  
  490. S6:    box "intermediate" "language" at S5 - (0, bh) height bh
  491.     arrow dashed
  492.     box "Intermediate" "Spec"
  493.     arrow
  494.     circle "ast"
  495.     arrow
  496. I6:    box "Intermediate"
  497.  
  498. S7:    box "code" "generation" at S6 - (0, bh) height bh
  499.     arrow dashed
  500.     box "Codegen" "Spec"
  501.     arrow
  502.     circle "beg"
  503.     arrow
  504. I7:    box "Codegen"
  505.  
  506.     arrow dashed from S1.e to P.w
  507.     box invis "Compiler" "Specification" at S1 + (0, bh)
  508.     box invis "Tool" "Specification" at SP + (0, bh)
  509.     box invis "Tool" at T + (0, bh)
  510.     box invis "Compiler" "Module" at I1 + (0, bh)
  511.  
  512.     line from I1.n up boxht * 0.9 <-
  513.     arrow from I1.s to I2.n
  514.     arrow from I2.s to I3.n
  515.     arrow from I3.s to I4.n <->
  516.     arc from I3.se to I5.ne at I4 -> cw
  517.     arrow from I5.s to I6.n
  518.     arrow from I6.s to I7.n
  519.     arrow from I7.s down boxht * 0.9
  520. .PE
  521. .b
  522. .bp
  523. .ce 2
  524. .sz 28
  525. Rex
  526. .sz 18
  527.  
  528. a scanner generator
  529.  
  530.  
  531. .sz 14
  532. - specifications are based on regular expressions
  533.  
  534. - actions are composed of target language statements
  535.  
  536. - right context is handled by an additional regular expression
  537.  
  538. - left context is handled by start states
  539.  
  540. - conflicts are resolved in favour of longest match and first rule given
  541.  
  542. - provides line and column of every token
  543.  
  544. - can normalize tokens to lower or upper case letters
  545.  
  546. - knows predefined rules to skip white space
  547.  
  548. - can handle include files
  549.  
  550. - generates table-driven scanners
  551.  
  552. - generates efficient scanners
  553.  
  554. - generates scanners in Modula-2 or C
  555.  
  556. - scanners process up to 180,000 lines/minute (on MC 68020)
  557.  
  558. - scanners are 4 times faster than those of LEX
  559. .b
  560. .bp
  561. .ce 2
  562. .sz 28
  563. Lalr
  564. .sz 18
  565.  
  566. a parser generator
  567.  
  568.  
  569. .sz 14
  570. - processes LALR(1) grammars
  571.  
  572. - actions are composed of target language statements
  573.  
  574. - allows to evaluate an S-Attribution during parsing
  575.  
  576. - reports grammar conflicts by easy to understand derivation trees
  577.  
  578. - resolves grammar conflicts with precedence and associativity
  579.  
  580. - generates automatic error reporting, recovery, and repair
  581.  
  582. - generates table-driven parsers
  583.  
  584. - generates efficient parsers
  585.  
  586. - generates parsers in Modula-2 or C
  587.  
  588. - parsers process up to 35,000 tokens/sec. or 580,000 lines/min. (on MC 68020)
  589.  
  590. - parsers are 3 times faster than those of YACC
  591. .b
  592. .bp
  593. .ce 2
  594. .sz 28
  595. Ell
  596. .sz 18
  597.  
  598. a parser generator
  599.  
  600.  
  601. .sz 14
  602. - processes LL(1) grammars in extended BNF
  603.  
  604. - actions are composed of target language statements
  605.  
  606. - allows to evaluate an L-Attribution during parsing
  607.  
  608. - generates automatic error reporting, recovery, and repair
  609.  
  610. - generates recursive descent parsers
  611.  
  612. - generates efficient parsers
  613.  
  614. - generates parsers in Modula-2 or C
  615.  
  616. - parsers process up to 55,000 tokens/sec. or 900,000 lines/min. (on MC 68020)
  617. .b
  618. .bp
  619. .ce 2
  620. .sz 28
  621. Ast
  622. .sz 18
  623.  
  624. a generator for abstract syntax trees
  625.  
  626.  
  627. .sz 14
  628. - generates abstract data types (program modules) to handle trees
  629.  
  630. - the trees may be attributed
  631.  
  632. - besides trees graphs are handled as well
  633.  
  634. - nodes may be associated with arbitrary many attributes of arbitrary type
  635.  
  636. - specifications are based on extended context-free grammars
  637.  
  638. - common notation for concrete and abstract syntax
  639.  
  640. - as well as for attributed trees and graphs
  641.  
  642. - an extension mechanism provides single inheritance
  643.  
  644. - trees are stored as linked records
  645.  
  646. - generates efficient program modules
  647.  
  648. - generates modules in Modula-2 or C
  649.  
  650. - provides many tree operations (procedures):
  651.  
  652. - node constructors combine aggregate notation and storage management
  653.  
  654. - ascii graph reader and writer
  655.  
  656. - binary graph reader and writer
  657.  
  658. - reversal of lists
  659.  
  660. - top down and bottom up traversal
  661.  
  662. - interactive graph browser
  663. .b
  664. .bp
  665. .ce 2
  666. .sz 28
  667. Ag
  668. .sz 18
  669.  
  670. an attribute evaluator generator
  671.  
  672.  
  673. .sz 14
  674. - processes ordered attribute grammars (OAGs)
  675.  
  676. - processes higher order attribute grammars (HAGs)
  677.  
  678. - operates on abstract syntax
  679.  
  680. - is based on tree modules generated by Ast
  681.  
  682. - the tree structure is fully known
  683.  
  684. - terminals and nonterminals may have arbitrary many attributes
  685.  
  686. - attributes can have any target language type
  687.  
  688. - allows tree-valued attributes
  689.  
  690. - differentiates input and output attributes
  691.  
  692. - allows attributes local to rules
  693.  
  694. - allows to eliminate chain rules
  695.  
  696. - offers an extension mechanism (single inheritance)
  697.  
  698. - attributes are denoted by unique selector names
  699.  
  700.    instead of nonterminal names with subscripts
  701. .b
  702. .bp
  703. .ce 2
  704. .sz 28
  705. Ag
  706. .sz 18
  707.  
  708. an attribute evaluator generator (continued)
  709.  
  710.  
  711. .sz 14
  712. - attribute computations are expressed in the target language
  713.  
  714. - attribute computations are written in a functional style
  715.  
  716. - attribute computations can call external functions
  717.  
  718. - non-functional statements and side-effects are possible
  719.  
  720. - allows to write compact, modular, and readable specifications
  721.  
  722. - AGs can consist of several modules
  723.  
  724. - the context-free grammar is specified only once
  725.  
  726. - checks an AG for completeness of the attribute computations
  727.  
  728. - checks for unused attributes
  729.  
  730. - checks an AG for the classes SNC, DNC, OAG, LAG, and SAG
  731.  
  732. - the evaluators are directly coded using recursive procedures
  733.  
  734. - generates efficient evaluators
  735.  
  736. - generates evaluators in Modula-2 (or C)
  737. .b
  738. .bp
  739. .ce 2
  740. .sz 28
  741. Estra
  742. .sz 18
  743.  
  744. a generator for transformations of attributed syntax trees
  745.  
  746.  
  747. .sz 14
  748. - is based on tree modules generated by Ast
  749.  
  750. - specifications are rule based
  751.  
  752. - a rule consists of a pattern and an action
  753.  
  754. - actions are composed of target language statements
  755.  
  756. - patterns describe tree fragments
  757.  
  758. - several transformations can be specified
  759.  
  760. - subtrees can be transformed in any order
  761.  
  762. - subtrees can be transformed several times
  763.  
  764. - subtrees can be transformed by several transformations
  765.  
  766. - inherited and synthesized attributes can be evaluated
  767.  
  768. - ambiguities are resolved using costs
  769.  
  770. - application of rules can be restricted by conditions
  771.  
  772. - pattern-matching by directly coded dynamic programming algorithm
  773.  
  774. - or by table-driven tree pattern-matcher
  775.  
  776. - generates efficient transformation modules
  777.  
  778. - generates transformation modules in Modula-2
  779.